#ifndef SurfRansacMatcherI_H_
#define SurfRansacMatcherI_H_
//OpenCV
#include "cv.h"
#include "highgui.h"
#include "myutils.h"
#include <string>
#include <iostream>
#include <stdio.h>

#include <pcl/io/pcd_io.h>
#include <pcl/point_types.h>
#include <pcl/registration/icp.h>
#include <pcl/common/transformation_from_correspondences.h>
#include <pcl/common/common_headers.h>
#include <pcl/features/normal_3d.h>
#include <pcl/io/pcd_io.h>
#include <pcl/visualization/pcl_visualizer.h>
#include <pcl/console/parse.h>

#include <Eigen/Core>
#include <Eigen/Geometry>
#include <boost/thread/thread.hpp>

using namespace std;

class FrameNode;
class Transformation;
class Map;

typedef std::vector<FrameNode, Eigen::aligned_allocator<Eigen::Vector4f> > FrameNodeVector;

class SurfRansacMatcherI: public FrameMatcher
{
	public:
		pcl::IterativeClosestPoint<pcl::PointXYZRGB, pcl::PointXYZRGB> icp;
		int nr_iter;
		float distance_threshold;
		SurfRansacMatcherI();
		~SurfRansacMatcherI();
		Transformation * getTransformation(FrameNode * src, FrameNode * dst);
		void update();
};

#endif
